package com.demo.demo.reflect;

import java.lang.reflect.Constructor;

public class  Reflect2 {
    /**
     * Class对象的功能
     * 获取功能
     *  1.获取构造方法们
     *  传入的是构造方法的参数列表类型
     *      Constructor<?>[] getConstructors()
     *      Constructor <?> getConstructor(Class<?> ...parameterTypes)
     *
     *      Constructor<?>[] getDeclaredConstructor()
     *     Constructor<?> getDeclaredConstructor(Class<?> ...parameterTypes)
     *      Constructor构造方法：
     *          1.创建对象
     *              T newInstance()
     *              如果使用空参数构造方法创建对象，操作可以简化：Class对象的newInStance方法
     *         3.忽略访问权限修饰符的安全检查
     *              setAccessible(true) ：暴力反射
     *  2.获取成员方法们
     *  传入方法名+参数列表类型
     *     Method[] getMethods()
     *      Method getMethod(Class<?> ...parameterTypes)
     *
     *      Method[] getDeclaredMethods()
     *      Method getDeclaredMethod(Class<?> ...parameterTypes)
     *        Method的执行方法：
     *              Object invoke（Object obj，Object ...parameterTypes）
     *       获取方法名：
     *          String getName()
     *  3.获取成员变量们
     *      Field[] getFields() :获取所有public修饰的所有成员变量
     *      Field getField(String name) ：获取指定的public修饰的成员变量
     *
     *      Field[] getDeclaredFields() ：获取所有的成员变量
     *      Field getDeclaredField(String name) ：获取指定的成员变量
     *          Field对象的操作：
     *              1。设置值
     *                  void get（Object obj）
     *              2。获取值
     *                void set（Object obj,Object value）
     *             3.忽略访问权限修饰符的安全检查
     *                  setAccessible(true) ：暴力反射
     *  4.获取类名
     *      class.getClassName();
     *
     * 获取class目录下的配置文件并且加载
     *  ClassLoader classLoader = 类名.class.getClassLoader()
     *  InputStream is = classLoader.getResourceAsStream("配置文件全名")
     *  pro.load(is)
     */


    public static void main(String[] args) {
        Class Reflect2 = com.demo.demo.reflect.Reflect2.class;

    }
}
